/**
 * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.thinkgem.jeesite.modules.sys.service;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.thinkgem.jeesite.common.constant.Constant;
import com.thinkgem.jeesite.common.persistence.Page;
import com.thinkgem.jeesite.common.service.CrudService;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.modules.sys.entity.Mdict;

import oracle.jdbc.Const;

import com.thinkgem.jeesite.modules.sys.dao.MdictDao;

/**
 * 多级字典表Service
 * @author zad
 * @version 2017-10-17
 */
@Service
@Transactional(readOnly = true)
public class MdictService extends CrudService<MdictDao, Mdict> {

	public Mdict get(String id) {
		return super.get(id);
	}
	
	public List<Mdict> findList(Mdict mdict) {
		return super.findList(mdict);
	}
	
	// 从字典列表 mdicts中查找值为value的名称
	public String mdictName(List<Mdict> mdicts,String value)
	{
		if(null == mdicts || mdicts.size() < 1 || StringUtils.isBlank(value))
		{
			return null;
		}
		for(Mdict mdict :mdicts)
		{
			if(value.equals(mdict.getValue()))
			{
				return mdict.getName();
			}
		}
		return null;
	}
	
	public Page<Mdict> findPage(Page<Mdict> page, Mdict mdict) {
		return super.findPage(page, mdict);
	}
	
	@Transactional(readOnly = false)
	public void save(Mdict mdict) {
		super.save(mdict);
	}
	
	@Transactional(readOnly = false)
	public void delete(Mdict mdict) {
		super.delete(mdict);
	}
	
	/**
	 * 
	 * @param type 复合字典大类类型
	 * @param value 复合字典大类类型值
	 * @return 复合字典大类值value所对应的标签（名称）
	 */
	public String getBigCatLabelByValue(String type,String value)
	{
		if(StringUtils.isBlank(type) || StringUtils.isBlank(value))
		{
			return null;
		}
		Mdict mdict = new Mdict();
		mdict.setPtype(Constant.Mdict.MDICT_ROOT_TYPE);
		mdict.setType(type);
		mdict.setValue(value);
		List<Mdict> mdicts = this.findList(mdict);
		if(null != mdicts && mdicts.size() == 1)
		{
			return mdicts.get(0).getName();
		}
		return null;
	}
	
	/**
	 * 
	 * @param ptype 复合字典大类类型
	 * @param bigCatValue 符合字典大类值
	 * @param value 复合字典小类值
	 * @return 该大类下 标签名称为name的标签小类值
	 */
	public String getSmallCatByValue(String ptype,String bigCatValue,String value)
	{
		if(StringUtils.isBlank(ptype) || StringUtils.isBlank(bigCatValue) || StringUtils.isBlank(value))
		{
			return null;
		}
		
		// 书画类没有小类
		if(ptype.equals(Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_PAINT))
		{
			return null;
		}
				
		String type = ptype + "_" + bigCatValue;
		
		Mdict mdict = new Mdict();
		mdict.setPtype(ptype);
		mdict.setType(type);
		mdict.setValue(value);
		List<Mdict> mdicts = this.findList(mdict);
		if(null != mdicts && mdicts.size() == 1)
		{
			return mdicts.get(0).getName();
		}
		return null;
	}
	
	/**
	 * 
	 * @param type 复合字典大类类型
	 * @param name 复合字典大类类型名称
	 * @return 复合字典大类名称name所对应的值
	 */
	public String getBigCatValueByLabel(String type,String name)
	{
		if(StringUtils.isBlank(type) || StringUtils.isBlank(name))
		{
			return null;
		}
		Mdict mdict = new Mdict();
		mdict.setPtype(Constant.Mdict.MDICT_ROOT_TYPE);
		mdict.setType(type);
		mdict.setName(name);
		List<Mdict> mdicts = this.findList(mdict);
		if(null != mdicts && mdicts.size() == 1)
		{
			return mdicts.get(0).getValue();
		}
		
		// 英语课程大类
		if((Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_ENG).equals(type))
		{
			if("其他".equals(name))
			{
				return "other";
			}
			if("英语口语".equals(name))
			{
				return "1";
			}
			if("英语才艺".equals(name))
			{
				return "2";
			}
		}
		
		// 艺术课程大类
		if((Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_ART).equals(type))
		{
			if("其他".equals(name))
			{
				return "other";
			}
			if("声乐类".equals(name))
			{
				return "1";
			}
			if("舞蹈类".equals(name))
			{
				return "2";
			}
			if("民族器乐".equals(name))
			{
				return "3";
			}
			if("西洋器乐".equals(name))
			{
				return "4";
			}
			if("表演类".equals(name))
			{
				return "5";
			}
			
		}
		// 书画课程大类
		if((Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_PAINT).equals(type))
		{
			if("其他".equals(name))
			{
				return "other";
			}
			if("软笔书法".equals(name))
			{
				return "1";
			}
			if("硬笔书法".equals(name))
			{
				return "2";
			}
			if("国画".equals(name))
			{
				return "3";
			}
			if("油画".equals(name))
			{
				return "4";
			}
			if("儿童画".equals(name))
			{
				return "5";
			}
			if("素描".equals(name))
			{
				return "6";
			}
			if("水彩画".equals(name))
			{
				return "7";
			}
			if("水粉画".equals(name))
			{
				return "8";
			}
			if("卡通漫画".equals(name))
			{
				return "9";
			}
			if("雕塑".equals(name))
			{
				return "10";
			}
			if("篆刻".equals(name))
			{
				return "11";
			}
		}
		return null;
	}
	
	
	/**
	 * 
	 * @param ptype 复合字典大类类型
	 * @param bigCatValue 符合字典大类值
	 * @param name 复合字典小类名称
	 * @return 该大类下 标签名称为name的标签小类值
	 */
	public String getSmallCatByLabel(String ptype,String bigCatValue,String name)
	{
		if(StringUtils.isBlank(ptype) || StringUtils.isBlank(bigCatValue) || StringUtils.isBlank(name))
		{
			return null;
		}
		
		// 书画类没有小类
		if(ptype.equals(Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_PAINT))
		{
			return null;
		}
				
		String type = ptype + "_" + bigCatValue;
		
		Mdict mdict = new Mdict();
		mdict.setPtype(ptype);
		mdict.setType(type);
		mdict.setName(name);
		List<Mdict> mdicts = this.findList(mdict);
		if(null != mdicts && mdicts.size() == 1)
		{
			return mdicts.get(0).getValue();
		}
		
		
		// 艺术类
		if(ptype.equals(Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_ART))
		{
			// 声乐类
			if("course_type_art_1".equals(type))
			{
				if("民族".equals(name))
				{
					return "1";
				}
				if("美声".equals(name))
				{
					return "2";
				}
				if("通俗".equals(name))
				{
					return "3";
				}
			}
			// 舞蹈类
			if("course_type_art_2".equals(type))
			{
				if("中外古典舞".equals(name))
				{
					return "1";
				}
				if("民族舞".equals(name))
				{
					return "2";
				}
				if("现代舞".equals(name))
				{
					return "3";
				}
				if("拉丁舞".equals(name))
				{
					return "4";
				}
			}
			// 民族器乐类
			if("course_type_art_3".equals(type))
			{
				if("古筝".equals(name))
				{
					return "1";
				}
				if("W型转调筝".equals(name))
				{
					return "2";
				}
				if("古琴".equals(name))
				{
					return "3";
				}
				if("琵琶".equals(name))
				{
					return "4";
				}
				if("柳琴".equals(name))
				{
					return "5";
				}
				if("大中阮".equals(name))
				{
					return "6";
				}
				if("三弦".equals(name))
				{
					return "7";
				}
				if("京胡".equals(name))
				{
					return "8";
				}
				if("二胡".equals(name))
				{
					return "9";
				}
				if("板胡".equals(name))
				{
					return "10";
				}
				if("马头琴".equals(name))
				{
					return "11";
				}
				if("笛".equals(name))
				{
					return "12";
				}
				if("笙".equals(name))
				{
					return "13";
				}
				if("唢呐".equals(name))
				{
					return "14";
				}
				if("萧".equals(name))
				{
					return "15";
				}
				if("葫芦丝".equals(name))
				{
					return "16";
				}
				if("扬琴".equals(name))
				{
					return "17";
				}
				if("木琴".equals(name))
				{
					return "18";
				}
			}
			
			// 西洋器乐类
			if("course_type_art_4".equals(type))
			{
				if("钢琴".equals(name))
				{
					return "1";
				}
				if("手风琴".equals(name))
				{
					return "2";
				}
				if("电子琴".equals(name))
				{
					return "3";
				}
				if("小提琴".equals(name))
				{
					return "4";
				}
				if("中提琴".equals(name))
				{
					return "5";
				}
				if("大提琴".equals(name))
				{
					return "6";
				}
				if("长笛".equals(name))
				{
					return "7";
				}
				if("短笛".equals(name))
				{
					return "8";
				}
				if("单簧管".equals(name))
				{
					return "9";
				}
				if("双簧管".equals(name))
				{
					return "10";
				}
				if("萨克斯".equals(name))
				{
					return "11";
				}
				if("小号".equals(name))
				{
					return "12";
				}
				if("圆号".equals(name))
				{
					return "13";
				}
				if("长号".equals(name))
				{
					return "14";
				}
				if("架子鼓".equals(name))
				{
					return "15";
				}
				if("电子鼓".equals(name))
				{
					return "16";
				}
			}
			
			// 表演类
			if("course_type_art_5".equals(type))
			{
				if("朗诵".equals(name))
				{
					return "1";
				}
				if("主持人".equals(name))
				{
					return "2";
				}
				if("讲故事".equals(name))
				{
					return "3";
				}
				if("小品".equals(name))
				{
					return "4";
				}
				if("课本剧".equals(name))
				{
					return "5";
				}
				if("戏曲".equals(name))
				{
					return "6";
				}
			}
		}
		
		// 英语类
		if(ptype.equals(Constant.Mdict.MDICT_COURSE_TYPE_PREFIX + Constant.Course.COURSE_SIGN_ENG))
		{
			// 英语口语类
			if("course_type_eng_1".equals(type))
			{
				if("朗诵".equals(name))
				{
					return "1";
				}
				if("演讲".equals(name))
				{
					return "2";
				}
				if("主持".equals(name))
				{
					return "3";
				}
			}
			
			// 英语才艺类
			if("course_type_eng_2".equals(type))
			{
				if("英文歌曲演唱".equals(name))
				{
					return "1";
				}
				if("课本剧".equals(name))
				{
					return "2";
				}
				if("小品".equals(name))
				{
					return "3";
				}
			}
		}
		
		return null;
	}
	
}